package modelo.tabla;

import java.util.List;
import javax.swing.table.AbstractTableModel;
import modelo.Ejemplo;

/**
 *
 * @author Marlon
 */
public class ModeloTablaEjemplos extends AbstractTableModel {

    private String[] columnNames;
    private List<Ejemplo> dataEjemplos;
    private String titulo = "Ejemplos";

    public ModeloTablaEjemplos(String[] columnNames, List<Ejemplo> dataEjemplos) {
        this.columnNames = columnNames;
        this.dataEjemplos = dataEjemplos;
    }

    @Override
    public String getColumnName(int column) {
        if (column == 0) {
            return titulo;
        }
        return columnNames[column - 1];
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        if (column == 0) {
            return false;
        }
        return true;
    }

    @Override
    public int getRowCount() {
        return dataEjemplos.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length + 1;
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        if (columnIndex == 0) {
            return int.class;
        } else if (columnIndex == dataEjemplos.get(0).getLongEntrada() + 1) { // Si es la neurona de salida
            return Double.class;
        } else {
            return Double.class; // las entradas
        }
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Ejemplo ejemplo = dataEjemplos.get(rowIndex);
        if (columnIndex == 0) {
            return rowIndex + 1;
        } else if (columnIndex == dataEjemplos.get(0).getLongEntrada() + 1) {
            return ejemplo.getSalida(0);
        } else {
            return ejemplo.getEntrada(columnIndex - 1);
        }
    }

    @Override
    public void setValueAt(Object value, int row, int col) {
        Ejemplo ejemplo = dataEjemplos.get(row);
        if (col == dataEjemplos.get(0).getLongEntrada() + 1) {
            ejemplo.setSalida(0, (Double) value);
        } else if (col > 0) {
            ejemplo.setEntrada(col - 1, (Double) value);
        }
        fireTableCellUpdated(row, col);
    }

    public void addEjemplo(Ejemplo ejemplo) {
        dataEjemplos.add(ejemplo);
        fireTableDataChanged();
    }

    public void deleteContacto(int selectedRow) {
        dataEjemplos.remove(selectedRow);
        fireTableDataChanged();
    }

    public String[] getColumnNames() {
        return columnNames;
    }

    public List<Ejemplo> getDataEjemplos() {
        return dataEjemplos;
    }
}
